package Simulateur;

import java.awt.Point;
import java.util.List;

import Domaine.Noeud;
import Domaine.Reseau;
import Domaine.Urgence;
import Domaine.Urgence.EtatUrgence;

public class UrgencePlusProche extends Strategie 
{
	
	public String getNom() {
		return "Urgence plus proche";
	}
	
	public UrgencePlusProche(Reseau reseau) {
		super(reseau);
		
	}

	@Override
	public Domaine.Urgence obtenirProchainUrgence() {
		
		Domaine.Urgence plusProche = null;
		Noeud noeudActuel = null;
		
		List<Urgence> listeUrgences = _reseau.getListeUrgence();
		for (Domaine.Urgence urgence : listeUrgences) {
			if (urgence.getEtat() == EtatUrgence.EnAttente) {
			
				if (plusProche == null) {
					plusProche = urgence;
					noeudActuel = obtenirNoeudUrgence(urgence);
				} 
				else 
				{
					Noeud noeudTemp  = obtenirNoeudUrgence(urgence); 
					if (Noeud.calculerDistanceEntreDeuxPoints(new Point(noeudActuel.getX(),noeudActuel.getY()), _reseau.getVehiculeUrgence().getCoordonnee()) >
							Noeud.calculerDistanceEntreDeuxPoints(new Point(noeudTemp.getX(),noeudTemp.getY()), _reseau.getVehiculeUrgence().getCoordonnee()))
					{
						plusProche = urgence;
					}
				}
			}
		}
		
		return plusProche;
	}
	
	public Noeud obtenirNoeudUrgence(Urgence urgence)
	{
		List<Noeud> listNoeuds = _reseau.getListeNoeuds();
		for (Noeud noeud : listNoeuds)
		{
			List<Urgence> listeUrgencesNoeud = noeud.getListeUrgences();
			for (Urgence urgenceNoeud :listeUrgencesNoeud )
			{
				if (urgenceNoeud == urgence)
				{
					return noeud;
				}
			}
		}
		return null;
	}
}